home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 23 / CU Amiga - Super CD-ROM 23 (June 1998).iso / CreatingGames / Utilities / Asm / AB3DIIsrc / source_4000 / JELLYBALL.s < prev    next >
Encoding:
Text File  |  1996-06-21  |  2.4 KB  |  214 lines

  1. VARPTRS: 
  2.  dc.l 0
  3.  dc.l 0
  4.  dc.w 0
  5.  dc.l 0
  6.  
  7. START:
  8.  
  9.  lea VARPTRS(pc),a6
  10.  move.l (a6),a0
  11.  move.l 4(a6),a1
  12.  move.w 8(a6),d7        ; num points
  13.  move.l 10(a6),a4
  14.  
  15.  move.w d7,d6
  16.  sub.w #2,d6
  17.  
  18. OUTERLOP:
  19.  lea.l 12(a0),a2
  20.  lea.l 12(a1),a3
  21.  
  22.  move.w d6,d7
  23.  
  24. INNERLOP:
  25.  move.l a4,d3
  26.  
  27.  move.l (a2),d0
  28.  sub.l (a0),d0
  29.  
  30.  cmp.l d0,d3
  31.  blt.s outrange
  32.  neg.l d3
  33.  cmp.l d0,d3
  34.  bgt.s outrange
  35.  neg.l d3
  36.  
  37.  move.l 4(a2),d1
  38.  sub.l 4(a0),d1
  39.  
  40.  cmp.l d1,d3
  41.  blt.s outrange
  42.  neg.l d3
  43.  cmp.l d1,d3
  44.  bgt.s outrange
  45.  neg.l d3
  46.  
  47.  move.l 8(a2),d2
  48.  sub.l 8(a0),d2
  49.  
  50.  cmp.l d2,d3
  51.  blt.s outrange
  52.  neg.l d3
  53.  cmp.l d2,d3
  54.  bgt.s outrange
  55.  neg.l d3
  56.  
  57.  move.l d0,d3
  58.  move.l d1,d4
  59.  move.l d2,d5
  60.  
  61.  muls d0,d0
  62.  muls d1,d1
  63.  muls d2,d2
  64.  add.l d0,d1
  65.  add.l d1,d2
  66.  
  67.  bsr CALCSQROOT
  68.  move.l a4,d0
  69.  cmp.l d0,d2
  70.  bgt outrange
  71.  
  72.  sub.l d2,d0    ; md-d
  73.  add.l d2,d2
  74.  muls d0,d3
  75.  divs d2,d3
  76.  ext.l d3
  77.  sub.l d3,(a1)
  78.  add.l d3,(a3)
  79.  
  80.  muls d0,d4
  81.  divs d2,d4
  82.  ext.l d4
  83.  sub.l d4,4(a1)
  84.  add.l d4,4(a3)
  85.  
  86.  muls d0,d5
  87.  divs d2,d5
  88.  ext.l d5 
  89.  sub.l d5,8(a1)
  90.  add.l d5,8(a3)
  91.  
  92. outrange:
  93.  
  94.  adda.w #12,a2 
  95.  adda.w #12,a3 
  96.  
  97.  dbra d7,INNERLOP
  98.  
  99.  adda.w #12,a0
  100.  adda.w #12,a1
  101.  
  102.  dbra d6,OUTERLOP
  103.  
  104.  move.w 8(a6),d7
  105.  move.l (a6),a0
  106.  move.l 4(a6),a1
  107.  
  108.  subq #1,d7
  109.  
  110. MOVEANDNORM:
  111.  
  112.  move.l (a1),d0
  113.  add.l (a0),d0
  114.  move.l 4(a1),d1
  115.  add.l 4(a0),d1
  116.  move.l 8(a1),d2
  117.  add.l 8(a0),d2
  118.  
  119.  move.l d0,d3
  120.  move.l d1,d4
  121.  move.l d2,d5
  122.  
  123.  muls d0,d0
  124.  muls d1,d1
  125.  muls d2,d2
  126.  add.l d0,d1
  127.  add.l d1,d2
  128.  bsr CALCSQROOT
  129.  
  130.  muls #10000,d3
  131.  muls #10000,d4
  132.  muls #10000,d5
  133.  divs d2,d3
  134.  divs d2,d4
  135.  divs d2,d5
  136.  
  137.  ext.l d3
  138.  ext.l d4
  139.  ext.l d5
  140.  
  141.  move.l d3,(a0)+
  142.  move.l d4,(a0)+
  143.  move.l d5,(a0)+
  144.  
  145.  REPT 3
  146.  move.l (a1),d0
  147.  muls #240,d0
  148.  asr.l #8,d0
  149.  move.l d0,(a1)+
  150.  endr
  151.  
  152.  
  153.  dbra d7,MOVEANDNORM
  154.  
  155.  
  156.  rts
  157.  
  158. CALCSQROOT:
  159.  
  160.  tst.l d2
  161.  beq .oksqr
  162.  
  163.  movem.l d0/d1/d3-d7/a0-a6,-(a7)
  164.  
  165.  move.w #31,d0
  166. .findhigh
  167.  btst d0,d2
  168.  bne .foundhigh
  169.  dbra d0,.findhigh
  170. .foundhigh
  171.  asr.w #1,d0
  172.  clr.l d3
  173.  bset d0,d3
  174.  move.l d3,d0
  175.  
  176.  move.w d0,d1
  177.  muls d1,d1    ; x*x
  178.  sub.l d2,d1    ; x*x-a
  179.  asr.l #1,d1    ; (x*x-a)/2
  180.  divs d0,d1    ; (x*x-a)/2x
  181.  sub.w d1,d0    ; second approx
  182.  bgt .stillnot0
  183.  move.w #1,d0
  184. .stillnot0
  185.  
  186.  move.w d0,d1
  187.  muls d1,d1
  188.  sub.l d2,d1
  189.  asr.l #1,d1
  190.  divs d0,d1
  191.  sub.w d1,d0    ; second approx
  192.  bgt .stillnot02
  193.  move.w #1,d0
  194. .stillnot02
  195.  
  196.  move.w d0,d1
  197.  muls d1,d1
  198.  sub.l d2,d1
  199.  asr.l #1,d1
  200.  divs d0,d1
  201.  sub.w d1,d0    ; second approx
  202.  bgt .stillnot03
  203.  move.w #1,d0
  204. .stillnot03
  205.  
  206.  move.w d0,d2
  207.  ext.l d2
  208.  
  209.  movem.l (a7)+,d0/d1/d3-d7/a0-a6
  210.  
  211. .oksqr
  212.  rts
  213.  
  214.